package net.lab1024.sa.admin.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ配置：自动创建交换机、队列、绑定关系
 */
@Configuration
public class RabbitMQConfig {

    // 引用MQ常量（建议单独抽成常量类，这里为了简洁直接定义）
    private static final String STOCK_WARN_EXCHANGE = "stock_warn_exchange";
    private static final String STOCK_WARN_ROUTING_KEY = "stock.warn.key";
    private static final String STOCK_WARN_QUEUE = "stock_warn_queue";

    /**
     * 1. 创建直连交换机（DirectExchange）：精确匹配路由键
     */
    @Bean
    public DirectExchange stockWarnExchange() {
        // 参数：交换机名称、是否持久化（true=重启后不丢失）、是否自动删除
        return new DirectExchange(STOCK_WARN_EXCHANGE, true, false);
    }

    /**
     * 2. 创建队列（Queue）：存储预警消息
     */
    @Bean
    public Queue stockWarnQueue() {
        // 参数：队列名称、是否持久化（true=重启后消息不丢失）、是否排他、是否自动删除
        return new Queue(STOCK_WARN_QUEUE, true, false, false);
    }

    /**
     * 3. 绑定交换机与队列：通过路由键关联
     */
    @Bean
    public Binding stockWarnBinding(DirectExchange stockWarnExchange, Queue stockWarnQueue) {
        // 绑定：交换机 + 路由键 → 队列
        return BindingBuilder.bind(stockWarnQueue)
                .to(stockWarnExchange)
                .with(STOCK_WARN_ROUTING_KEY);
    }
}